package controller.gui.menubar;

import gui.MapEditorFrame;
import inputstream.FileObject;

import java.awt.Frame;
import java.awt.event.ActionEvent;

import javax.swing.JFileChooser;
import javax.swing.JMenuItem;

import map.AbstractMap;

import advance.GameMap;


import controller.BrowseUser;
import controller.Controller;
import controller.MenuBarController;
import controller.NullStaticObjectException;
import controller.SaveHandlerUser;
import controller.StrataNumberUser;
import controller.StratumLevelUser;
import errors.KeyNotFoundException;

/**rappresenta il Controller che gestisce gli eventi del pulsante nel menu "apri mappa"
 * 
 * @author koldar
 * @version 1.0
 */
public final class OpenMapController extends MenuBarController implements BrowseUser,SaveHandlerUser,StratumLevelUser,StrataNumberUser{

	public OpenMapController(MapEditorFrame _frame,JMenuItem towire){
		super(_frame,towire);
	}
	
	/**indica la lista di istruzioni che devono essere eseguite quando il pulsante "apri mappa" viene premuto
	 * 
	 */
	@Override
	public void wizardInizializer(ActionEvent arg0)throws NullStaticObjectException {
		GameMap maploaded=null;
		//FIXME c'è un problema strano... se premo il background secondarymenu e poi cerco di aprire un file mi lascia entrare in open ma vedo solo le cartelle
		this.filechooser.setFileFilter(DIRECTORYMDMAPFILTER);
		//this.filechooser.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES);
		if (this.filechooser.showOpenDialog(this.frame)==JFileChooser.APPROVE_OPTION){//l'utente ha scelto la nuova mappa da caricare
			try{
				this.setCurrentmap((GameMap)AbstractMap.loadFromFile(filechooser.getSelectedFile(),this.frame.getDisplay()));
				this.stratum.setValue(this.currentmap.getStratiSize()==0?this.NOCURRENTSTRATUM:0);
				this.totalStrata.setValue(this.currentmap.getStratiSize());
				this.toBeSavedWithSaveAs.setValue(false);
			} catch (NullStaticObjectException mapnull){
				this.log.setText("loading procedure failed!");
			}
			/*this.saveHandler.setTheFile(filechooser.getSelectedFile());
			maploaded=(GameMap)this.saveHandler.LoadObject();
			if (this.saveHandler.getFileError()!=FileObject.NULL){
<<<<<<< .mine
				Controller.log.setText("loading error #"+this.saveHandler.getFileError());
=======
				Controller.log.setText("  Loading error #" + this.saveHandler.getFileError() + " occurred.");
>>>>>>> .r254
			}else{
<<<<<<< .mine
				Controller.log.setText("opening operation completed");
=======
				Controller.log.setText("  Loading successful.");
>>>>>>> .r254
				//impostazione della mappa corrente
				this.setCurrentmap(maploaded);
				//collegamento tra la mappa e il componente da disegnare
				this.setCurrentmapWithComponent(this.frame.getDisplay());
				//impostazione dello strato corrente
				this.stratum.setValue(this.currentmap.getStratiSize()==0?this.NOCURRENTSTRATUM:0);
				this.totalStrata.setValue(this.currentmap.getStratiSize());
				//impostazione circa il salvataggio con Save as
				this.toBeSavedWithSaveAs.setValue(false);
			}*/
		}
		this.setToIdle();
	}

	
}
